package com.yc.thread;

public class Demo1 {
    public static void main(String[] args) throws InterruptedException {
    //主线程 由main线程启动的就是主线程
        Thread thread = Thread.currentThread();
        long id = thread.getId();
        String name = thread.getName();
        System.out.println(name+":"+id);

      //  用户线程是默认的线程类型，用户线程在Java程序中非常重要，JVM一定会等到所有的用户线程执行完之后才会自然结束(自己创建的线程)
        //多态 引用转型  new Thread(String name) 创建一个指定名称的线程
        Thread t=new Saodi("扫地线程");

        // start 一执行，后面的代码不会等待当前的run方法执行结束，就会立即执行
        //    new Thread(Runnable target, String name) 利用Runnable对象创建一个线程，并指定该线程的名称*/
        Thread t1=new Thread(new Cachuang(),"擦窗线程");
       // priority线程优先级 1~10,10最高,5默认
        t.setPriority(10);//优先级高的线程所分配的时间片多，资源多
        t1.setPriority(1);

        //设置精灵线程  精灵线程又名守护线程，是为用户线程服务的线程，当所有的用户线程执行结束之后，守护线程也会随之结束
        //此例，当主线程执行玩后将不在执行其子线程t，t1

      /*  t.setDaemon(true);
        t1.setDaemon(true);*/


        t.start();
        t1.start();

        //主线程休眠100毫秒
        Thread.sleep(100);
        System.out.println("=============主线程执行完毕===========");
    }
}

// 创建线程
//1 继承java.lang.Thread类
//2 实现java.lang.Runnable接口

//继承Thread
class Saodi extends Thread{

    public Saodi(String name){
        super(name);
    }
    @Override
    public void run() {
        Thread thread = Thread.currentThread();
        long id = thread.getId();
        String name = thread.getName();
        for (int i = 0; i <1000 ; i++) {
            System.out.println(name+":"+id+"==="+i);//扫地线程:22===0 id每个线程时间片所分配的id
        }
    }
}

//实现 Runnable 接口
class Cachuang implements Runnable{
    @Override
    public void run() {
        Thread thread = Thread.currentThread();
        long id = thread.getId();
        String name = thread.getName();
        for (int i = 0; i < 1000; i++) {
            System.out.println(name+":"+id+"==="+i);

        }
    }
}
/*2.3 Thread类常用的构造方法
        Thread类共提供8种构造方法重载，以下是常用的几种:
        new Thread() 创建一个新的线程
        new Thread(String name) 创建一个指定名称的线程
        new Thread(Runnable target) 利用Runnable对象创建一个线程，启动时将执行该对象的run方法
        new Thread(Runnable target, String name) 利用Runnable对象创建一个线程，并指定该线程的名称*/
